Maryland Poverty Line Credit#
Maryland’s Poverty Line Credit provides up to 5% of earned income to eligible Maryland filers with income below the poverty line.
Examples#
Because the Poverty Line Credit is based on the poverty line relative to the Earned Income Tax Credit, which is more generous for families with children and which doesn’t give more for families with more than three children, it primarily reaches low-income childless filers and filers with more than six children.
from policyengine_us import IndividualSim
import pandas as pd
import plotly.express as px
def make(adults, children):
sim = IndividualSim(year=2022)
sim.add_person(name="head", age=25, is_tax_unit_head=True)
members = ["head"]
if adults > 1:
sim.add_person(name="spouse", is_tax_unit_head=False)
members += ["spouse"]
for i in range(children):
child = "child{}".format(i)
sim.add_person(name=child, age=5)
members += [child]
sim.add_tax_unit(
name="tax_unit",
members=members,
)
sim.add_spm_unit(name="spm_unit", members=members)
sim.add_household(name="household", members=members, state_code="MD")
sim.vary("employment_income", max=100_000, step=100)
return pd.DataFrame(
dict(
employment_income=sim.calc("employment_income")[0],
plc=sim.calc("md_poverty_line_credit")[0].round(),
plc_mtr=-sim.deriv(
"md_poverty_line_credit",
"employment_income",
wrt_target="head",
),
adults=adults,
children=children,
)
)
l = []
for adults in range(1, 3):
for children in range(0, 10):
l.append(make(adults, children))
df = pd.concat(l)
LABELS = dict(
employment_income="Employment income",
plc="MD Poverty Line Credit",
plc_mtr="MD Poverty Line Credit marginal tax rate",
adults="Adults",
children="Children",
)
fig = px.line(
df,
"employment_income",
"plc",
color="children",
animation_frame="adults",
labels=LABELS,
title="Maryland Poverty Line Credit",
)
fig.update_layout(
xaxis_tickformat="$,",
yaxis_tickformat="$,",
yaxis_range=[0, df.plc.max() * 1.05],
)
fig.show()
Maryland’s Poverty Line Credit creates marginal tax rates as low as -15.3%, and then infinite marginal tax rates at its ineligibility cliff (100% of the poverty line).
fig = px.line(
df,
"employment_income",
"plc_mtr",
color="children",
animation_frame="adults",
labels=LABELS,
title="Maryland Poverty line credit marginal tax rate",
)
fig.update_layout(
xaxis_tickformat="$,", yaxis_tickformat=".1%", yaxis_range=[-0.2, 0.2]
)
fig.show()
Budgetary impact#
Applying 2022 rules to the 2020 Current Population Survey, OpenFisca US estimates that the Maryland Poverty Line Credit costs $17 million.
from policyengine_us import Microsimulation
sim = Microsimulation(dataset_year=2020)
sim.calc("md_poverty_line_credit", period=2022).sum() / 1e6
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/policyengine_core/simulations/simulation.py:182, in Simulation.build_from_dataset(self)
181 try:
--> 182 data = self.dataset.load(self.dataset_year)
183 except:
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/policyengine_core/data/dataset.py:126, in Dataset.load(self, year, key, mode)
124 if key is None:
125 # If no key provided, return the basic H5 reader.
--> 126 return h5py.File(file, mode=mode)
127 else:
128 # If key provided, return only the values requested.
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/h5py/_hl/files.py:567, in File.__init__(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, fs_strategy, fs_persist, fs_threshold, fs_page_size, page_buf_size, min_meta_keep, min_raw_keep, locking, alignment_threshold, alignment_interval, meta_block_size, **kwds)
564 fcpl = make_fcpl(track_order=track_order, fs_strategy=fs_strategy,
565 fs_persist=fs_persist, fs_threshold=fs_threshold,
566 fs_page_size=fs_page_size)
--> 567 fid = make_fid(name, mode, userblock_size, fapl, fcpl, swmr=swmr)
569 if isinstance(libver, tuple):
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/h5py/_hl/files.py:231, in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
230 flags |= h5f.ACC_SWMR_READ
--> 231 fid = h5f.open(name, flags, fapl=fapl)
232 elif mode == 'r+':
File h5py/_objects.pyx:54, in h5py._objects.with_phil.wrapper()
File h5py/_objects.pyx:55, in h5py._objects.with_phil.wrapper()
File h5py/h5f.pyx:106, in h5py.h5f.open()
FileNotFoundError: [Errno 2] Unable to open file (unable to open file: name = '/home/runner/work/policyengine-us/policyengine-us/policyengine_us/data/storage/cps_2020.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
Cell In[3], line 3
1 from policyengine_us import Microsimulation
----> 3 sim = Microsimulation(dataset_year=2020)
5 sim.calc("md_poverty_line_credit", period=2022).sum() / 1e6
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/policyengine_core/simulations/simulation.py:131, in Simulation.__init__(self, tax_benefit_system, populations, situation, dataset, dataset_year, reform)
129 self.dataset = dataset
130 self.dataset_year = dataset_year
--> 131 self.build_from_dataset()
133 # Backwards compatibility methods
134 self.calc = self.calculate
File /opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/site-packages/policyengine_core/simulations/simulation.py:184, in Simulation.build_from_dataset(self)
182 data = self.dataset.load(self.dataset_year)
183 except:
--> 184 data = self.dataset.load()
185 except FileNotFoundError as e:
186 raise FileNotFoundError(
187 f"The dataset file {self.dataset.name} (with year {self.dataset_year}) could not be found. "
188 + "Make sure you have downloaded or built it using the `policyengine-core data` command."
189 ) from e
TypeError: load() missing 1 required positional argument: 'year'